package top.lshaci.learning.springboot.jpa.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import top.lshaci.learning.springboot.jpa.dto.PersonDto;
import top.lshaci.learning.springboot.jpa.entity.Person;

import java.util.List;

/**
 * PersonRepository
 *
 * @author liangxu
 */
public interface PersonRepository extends JpaRepository<Person, Long> {

    /**
     * 自定义 JPQL, 返回自定义对象（需要定义转换器）
     * <pre>
     *     实际返回类型为【实体类型】
     * </pre>
     *
     * @return 自定义对象
     */
    @Query("select p from Person p")
    List<PersonDto> find2Dto();

    /**
     * 自定义原生 SQL, 返回自定义对象（需要定义转换器）
     * <pre>
     *     实际返回类型为：org.springframework.data.jpa.repository.query.AbstractJpaQuery.TupleConverter.TupleBackedMap
     * </pre>
     *
     * @return 自定义对象
     */
    @Query(value = "select p.* from person p", nativeQuery = true)
    List<PersonDto> find2DtoNative();

    /**
     * JPA 自动生成的 sql 可以直接返回为自定义对象
     *
     * @param minAge age 最小值
     * @return 自定义对象
     */
    List<PersonDto> findByAgeGreaterThanEqual(Integer minAge);
}
